package cn.edu.cug.cs.gtl.apis.render.projectors;

import cn.edu.cug.cs.gtl.apis.render.NativeObjectWrapper;
import cn.edu.cug.cs.gtl.apis.render.basics.*;

public interface Projector extends NativeObjectWrapper {
    ViewVolume getViewVolume();
    Projector copy();
    Matrix getWorkingSpace();

    /**
     * Applies the projector using the given line in world coordinates, returning the point in three dimensions that it projects to.
     * @param line
     * @return
     */
    Vec3f intersect(Line line);

    /**
     * Apply the projector using the given point, returning the point in three dimensions that it projects to.
     *
     * @param point
     * @return
     */
    Vec3f	project(Vec2f point);


    void setViewVolume(ViewVolume vol);

    void	setWorkingSpace(Matrix space);
}
